package cn.dengta.webapp.user.model;

import cn.dengta.common.model.ValueProxy;
import cn.dengta.common.model.ValueProxyImpl;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.Getter;

/**
 * 用户类型
 */
@Getter
public enum RecommendLevel implements ValueProxyImpl<RecommendLevel, Integer> {
	/** 普通用户 */
	L0(0, "无"),
	/** 一级用户 */
	L1(1, "一级"),
	/** 二级用户 */
	L2(2, "二级"),
	/** 三级用户 */
	L3(3, "三级"),
	/** 四级用户 */
	L4(4, "四级"),
	/** 五级用户 */
	L5(5, "五级"),
	/** 六级用户 */
	L6(6, "六级"),
	/** 七级用户 */
	L7(7, "七级"),
	/** 八级用户 */
	L8(8, "八级"),
	/** 九级用户 */
	L9(9, "九级"),
	/** 十级用户【白名单】 */
	L10(10, "十级", "精选"),
	/** 十一级用户【VIP白名单】自动加入 */
	L11(11, "十一级", "VIP"),
	/** 十二级用户【VIP白名单】手动加入 */
	L12(12, "十二级", "VIP"),
	//
	;

	public static final RecommendLevel WHITELIST = L10;

	// 定义私有变量
	@EnumValue
	public final Integer value;
	public final String desc;
	final ValueProxy<RecommendLevel, Integer> proxy;

	// 构造函数，枚举类型只能为私有
	RecommendLevel(Integer value, String label, String desc) {
		this.value = value;
		this.desc = desc;
		this.proxy = new ValueProxy<>(this, value, label);
	}

	RecommendLevel(Integer value, String label) {
		this(value, label, null);
	}

	public static RecommendLevel[] getValues() {
		return ValueProxy.getCachedArray(RecommendLevel.class, RecommendLevel::values);
	}

	public static boolean inWhitelist(RecommendLevel level) {
		return level.value >= WHITELIST.value;
	}

	public static RecommendLevel of(Integer value) {
		return L0.getValueOf(value);
	}

}
